//
//  MainViewController.swift
//  新浪微博-初建项目
//
//  Created by danny on 15/6/24.
//  Copyright © 2015年 DannyLiu. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        
        addChildVCs()
        
        // 在这里把原来的tabbar替换成自定义的,因为是get(相当于readonly),因此要用kvc来赋值
        let tb = MainTabBar()
        
        setValue(tb, forKeyPath: "tabBar")
        
        // 给中间的按钮添加点击事件
        tb.middleButton.addTarget(self, action: "middleButtonClicked", forControlEvents: UIControlEvents.TouchUpInside)
        
        
    }
    
    /// 中间按钮的点击事件(点击事件不能私有,是系统循环监听的)
    func middleButtonClicked(){
        
    }
    
    
    ///  添加子控制器
    private func addChildVCs(){
        
        let path = NSBundle.mainBundle().pathForResource("VCSettings.json", ofType: nil)!
        
        let data = NSData(contentsOfFile: path)!
        
        // 用do cache来try是否能够从数据中取到对象,不像oc中能够给error传个指针地址进去
        do {
            let array = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments)
            
            for dict in array as! [[String:String]]{
                
                addChildViewController(dict["vcName"]!, title: dict["title"]!, image: dict["imageName"]!)
                
            }
            
        } catch{
            // 如果从网络加载的 json 出错，直接用字符串加载
            addChildViewController("HomeViewController", title: "首页", image: "tabbar_home")
            addChildViewController("MessageViewController", title: "消息", image: "tabbar_message_center")
            addChildViewController("DiscoverViewController", title: "发现", image: "tabbar_discover")
            addChildViewController("ProfileViewController", title: "我", image: "tabbar_profile")
        }
    }
    
    ///  添加自控制器的方法
    ///
    ///  :param: vcName         子控制器的名字
    ///  :param: title           标题(nev和tabbar共享)
    ///  :param: image           图片
    private func addChildViewController(vcName: String, title: String, image: String) {
        
        // 在 swift 中，类名是包含命名空间的
        // 利用 info.plist中的CFBundleExecutable来找到本项目的命名空间
        let projectName = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
        


//
        let className: AnyClass = NSClassFromString(projectName + "." + vcName)!
        
        // 这个地方要用new,不能用alloc,否则定义的bool属性不好使
        let vc = className.new() as! UIViewController
        

//         设置自控制器的标题(nev和tabbar共享标题)
        vc.title = title
        
        vc.tabBarItem.image = UIImage(named: image)
        
        vc.tabBarItem.selectedImage = UIImage(named: image + "_highlighted")
        
        let nav = UINavigationController(rootViewController: vc)
        
        addChildViewController(nav)
//
    }

}
